// 1. 核心配置：后端基础地址（与后端服务地址一致）
const baseURL = "http://localhost:8080";

// 2. 登录状态检查（核心功能，未登录跳转登录页）
function checkLogin() {
    const user = sessionStorage.getItem("userInfo");
    // 未登录且当前不是登录页 → 强制跳转
    if (!user && !window.location.pathname.includes("login.html")) {
        window.location.href = "../pages/login.html";
    }
    return user ? JSON.parse(user) : null;
}

// 3. 时间格式化（播放器必备：秒 → mm:ss）
function formatTime(seconds) {
    if (isNaN(seconds)) return "00:00";
    const mins = Math.floor(seconds / 60);
    const secs = Math.floor(seconds % 60);
    return `${mins.toString().padStart(2, "0")}:${secs.toString().padStart(2, "0")}`;
}

// 4. 消息提示（简化版，全局通用）
function showToast(message) {
    alert(message);
}

// 5. 播放器公共逻辑（所有页面共用，对接音频元素）
let audioPlayer = null;
function initPlayer() {
    // 初始化播放器元素（用jQuery选择器替代原生getElementById）
    audioPlayer = $("#audio-player")[0]; // 获取原生DOM元素
    const $playPauseBtn = $("#play-pause-btn");
    const $progressBar = $("#progress-bar");
    const $progressIndicator = $("#progress-indicator");
    const $currentTimeEl = $("#current-time");
    const $totalTimeEl = $("#total-time");

    // 播放/暂停切换（jQuery点击事件）
    $playPauseBtn.click(function () {
        if (!audioPlayer.src) {
            showToast("请先选择音乐播放");
            return;
        }
        // 切换播放状态
        if (audioPlayer.paused) {
            audioPlayer.play();
            $playPauseBtn.html('<span class="icon icon-pause"></span>');
        } else {
            audioPlayer.pause();
            $playPauseBtn.html('<span class="icon icon-play"></span>');
        }
    });

    // 进度条实时更新（原生事件+jQuery操作）
    $(audioPlayer).on("timeupdate", function () {
        const progress = (audioPlayer.currentTime / audioPlayer.duration) * 100;
        $progressIndicator.css("width", `${progress}%`);
        $currentTimeEl.text(formatTime(audioPlayer.currentTime));
    });

    // 加载完成显示总时长
    $(audioPlayer).on("loadedmetadata", function () {
        $totalTimeEl.text(formatTime(audioPlayer.duration));
    });

    // 点击进度条跳转
    $progressBar.click(function (e) {
        const rect = $(this)[0].getBoundingClientRect();
        const pos = (e.clientX - rect.left) / rect.width;
        audioPlayer.currentTime = pos * audioPlayer.duration;
    });
}

// 6. 播放音乐（对接后端/music/get接口，核心功能）
function playMusic(music) {
    // 初始化播放器（防止未初始化）
    if (!audioPlayer) initPlayer();

    // 拼接音频地址：后端需要带.mp3后缀的音乐名（参考后端MusicController的/get接口）
    const musicName = `${music.title}.mp3`;
    const audioSrc = `${baseURL}/music/get?musicName=${encodeURIComponent(musicName)}`;

    // 调试：打印音频地址（便于排查后端接口问题）
    console.log("播放音频地址：", audioSrc);

    // 更新播放器信息（jQuery操作DOM）
    audioPlayer.src = audioSrc;
    $("#now-playing-title").text(music.title);
    $("#now-playing-artist").text(music.singer);

    // 音频加载完成提示
    $(audioPlayer).on("loadeddata", function () {
        showToast(`已加载歌曲《${music.title}》，请点击播放按钮开始播放`);
    });

    // 播放错误监听（排查格式/地址问题）
    $(audioPlayer).on("error", function (e) {
        console.error("播放错误详情：", e);
        const errorMsg = {
            1: "音频加载中断",
            2: "音频格式不支持（后端仅支持MP3）",
            3: "音频解码失败",
            4: "音频URL无效（检查后端音乐路径配置）"
        }[e.target.error.code] || "未知错误";
        showToast(`播放失败：${errorMsg}，请检查音频文件或网络`);
    });

    // 尝试自动播放（浏览器可能拦截，需用户手动点击）
    audioPlayer.play().catch(() => {
        showToast(`请点击底部播放按钮播放《${music.title}》`);
    });
    $("#play-pause-btn").html('<span class="icon icon-pause"></span>');
}

// 7. 全局通用Ajax请求封装（对接后端所有接口，精简版）
function requestAjax(options) {
    // 默认参数：GET请求，空参数
    const {
        url,
        method = "GET",
        data = {},
        isFormData = false, // 标记是否为文件上传（multipart/form-data）
        success,
        error
    } = options;

    // 构建Ajax配置
    const ajaxConfig = {
        url: `${baseURL}${url}`, // 完整接口地址
        method: method.toUpperCase(), // 统一转为大写
        dataType: "json", // 后端返回JSON格式（与后端ResponseBodyMessage一致）
        xhrFields: { withCredentials: true }, // 携带Cookie（适配后端Session登录）
        success: function (res) {
            // 后端返回status=0代表成功（参考后端接口规范）
            if (res.status === 0) {
                success && success(res.data, res.message);
            } else {
                showToast(res.message || "操作失败");
                error && error(res);
            }
        },
        error: function (xhr) {
            console.error("接口请求失败：", xhr);
            showToast("网络错误，请检查后端服务是否正常");
            error && error(xhr);
        }
    };

    // 处理参数：GET用data，POST区分普通JSON和FormData
    if (ajaxConfig.method === "GET") {
        ajaxConfig.data = data; // GET参数拼在URL后
    } else {
        if (isFormData) {
            // 文件上传：不处理数据格式，浏览器自动设置multipart/form-data
            ajaxConfig.processData = false;
            ajaxConfig.contentType = false;
            ajaxConfig.data = data;
        } else {
            // 普通POST：JSON格式（与后端接收格式一致）
            ajaxConfig.contentType = "application/json";
            ajaxConfig.data = JSON.stringify(data);
        }
    }

    // 发送Ajax请求（jQuery核心方法）
    $.ajax(ajaxConfig);
}